package cn.jhg.account.rest;

import java.sql.Timestamp;
import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import cn.jhg.account.entity.MaterialBatch;
import cn.jhg.account.util.ServiceResult;
@Path("/MaterialBatch")
public interface MaterialBatchRest {
	/**
	 * 新增原料批次
	 * @param batch	批次实体
	 * @return	ServiceResult<Integer>	批次id，ErrorCode
	 */
	@Path("/add")
	@POST
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<Integer> addBatch(@FormParam("codeId") int codeId, 
								@FormParam("batchNo") String batchNo, 
								@FormParam("manuId") int manuId, 
								@FormParam("statId") int statId, 
								@FormParam("propId") String propId, 
								@FormParam("expDate") Timestamp expDate, 
								@FormParam("inspDate") Timestamp inspDate);	
		
	/**
	 * 更新原料批次
	 * @param batch 批次实体
	 * @return	ServiceResult<Object>	ErrorCode
	 */
	@Path("/update")
	@PUT
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<Object> updateBatch(@FormParam("id") int id,
									@FormParam("codeId") int codeId, 
									@FormParam("batchNo") String batchNo, 
									@FormParam("manuId") int manuId, 
									@FormParam("statId") int statId, 
									@FormParam("propId") String propId, 
									@FormParam("expDate") Timestamp expDate, 
									@FormParam("inspDate") Timestamp inspDate);	

	/**
	 * 删除原料批次
	 * @param id	批次id
	 * @return	ServiceResult<Object>	ErrorCode
	 */
	@Path("/delete")
	@DELETE
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<Object> deleteBatch(@FormParam("id") int id);

	/**
	 * 根据id查询原料批次
	 * @param id	批次id
	 * @return	ServiceResult<MaterialBatch>	批次实体，ErrorCode
	 */
	@Path("/query")
	@GET
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<MaterialBatch> queryBatchById(@QueryParam("id") int id);

	/**
	 * 查找原料批次
	 * @param batchNo	批次号	
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @return	ServiceResult<List<Integer>>	批次id集合，ErrorCode
	 */
	@Path("/find")
	@GET
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<List<Integer>> findBatch(@QueryParam("batchNo") String batchNo, @QueryParam("manuName") String manuName, @QueryParam("statId") int statId);
	
	/**
	 * 查找批次详细信息
	 * @param batchNo	批次号
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @return	ServiceResult<List<MaterialBatch>>	批次实体集合，ErrorCode
	 */
	@Path("/findAll")
	@GET
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<List<MaterialBatch>> findBatchDetail(@QueryParam("batchNo") String batchNo, @QueryParam("manuName") String manuName, @QueryParam("statId") int statId);

	/**
	 * 检查批次有效期
	 * @param timestamp	时间戳
	 * @return	ServiceResult<List<Integer>>	有效期超过 timestamp 所指定时间的批次id集合 ，ErrorCode
	 */
	@Path("/checkExp")
	@GET
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<List<Integer>> checkExpiredDate(@QueryParam("timestamp") Timestamp timestamp);
	// exp_date 字段表示有效期，检查时忽略本字段为空的记录

	/**
	 * 检查批次复检期
	 * @param timestamp	时间戳
	 * @return	ServiceResult<List<Integer>>	复检期超过 timestamp 所指定时间的批次id集合，ErrorCode
	 */
	@Path("/checkInsp")
	@GET
	@Produces({MediaType.APPLICATION_JSON, })
	public ServiceResult<List<Integer>> checkInspectionDate(@QueryParam("timestamp") Timestamp timestamp);
	// insp_date 字段表示复检期，检查时忽略本字段为空的记录
}
